package com.baizhi.pool;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * 线程池
 * 线程池是管理线程的机制，提前在线程池中准备好线程，需要线程的时候由线程池来提供线程，主要解决两个问题
 * 1.控制线程的数量
 * 2. 提高线程的复用率
 */
public class ThreadPoolDemo {
    public static void main(String[] args) {
        //创建一个固定大小的线程池，线程池中有两天线程
        ExecutorService threadPool = Executors.newFixedThreadPool(2);

        //创建五个任务
        for (int i = 0; i < 5; i++) {
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    try {
                        String name = Thread.currentThread().getName();
                        System.out.println(name + "正在执行任务");
                        Thread.sleep(1000);
                        System.out.println(name + "完了任务");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            };

            //把任务交给线程池
            threadPool.execute(r);
            System.out.println("交给了线程池一个任务");
        }

        /**
         * shutdownNow()  调用后线程池会自动调用所有线程的interrupt(),中断了所有的线程，停止了线程池
         *
         * shutdown() 线程池不再接收新的工作，但是会把已经收的工作全部执行完毕，执行完毕之后停止线程池
         */
        //threadPool.shutdownNow();
        //System.out.println("线程池停止工作了");
        threadPool.shutdown();
        System.out.println("线程池不再接受新的工作");

    }
}
